package com.hk.commons.util.date;

import com.hk.commons.util.StringUtils;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;

/**
 * 时间格式
 *
 * @author kevin
 * @date 2017年9月15日下午5:46:30
 */
@Getter
@RequiredArgsConstructor
public enum DatePattern {

    /**
     * yyyy
     */
    YYYY(DateTimeUtils.YYYY),

    /**
     * MM-dd
     */
    MM_DD(DateTimeUtils.MM_DD),

    /**
     * yyyy-MM
     */
    YYYY_MM(DateTimeUtils.YYYY_MM),

    /**
     * yyyy-MM-dd
     */
    YYYY_MM_DD(DateTimeUtils.YYYY_MM_DD),

    /**
     * yyyyMMddHHmmss
     */
    YYYYMMDDHHMMSS(DateTimeUtils.YYYYMMDDHHMMSS),

    /**
     * yyyyMMdd
     */
    YYYYMMDD(DateTimeUtils.YYYYMMDD),

    /**
     * MM-dd HH:mm
     */
    MM_DD_HH_MM(DateTimeUtils.MM_DD_HH_MM),

    /**
     * MM-dd HH:mm:ss
     */
    MM_DD_HH_MM_SS(DateTimeUtils.MM_DD_HH_MM_SS),

    /**
     * yyyy-MM-dd HH:mm
     */
    YYYY_MM_DD_HH_MM(DateTimeUtils.YYYY_MM_DD_HH_MM),

    /**
     * yyyy-MM-dd HH:mm:ss
     */
    YYYY_MM_DD_HH_MM_SS(DateTimeUtils.YYYY_MM_DD_HH_MM_SS),

    /**
     * MM/dd
     */
    MM_DD_EN(DateTimeUtils.MM_DD_EN),

    /**
     * yyyy/MM
     */
    YYYY_MM_EN(DateTimeUtils.YYYY_MM_EN),

    /**
     * yyyy/MM/dd
     */
    YYYY_MM_DD_EN(DateTimeUtils.YYYY_MM_DD_EN),

    /**
     * MM/dd HH:mm
     */
    MM_DD_HH_MM_EN(DateTimeUtils.MM_DD_HH_MM_EN),
    /**
     * MM/dd/yy
     */
    MM_DD_YY_CN(DateTimeUtils.MM_DD_YY_CN),

    /**
     * MM/dd HH:mm:ss
     */
    MM_DD_HH_MM_SS_EN(DateTimeUtils.MM_DD_HH_MM_SS_EN),

    /**
     * yyyy/MM/dd HH:mm
     */
    YYYY_MM_DD_HH_MM_EN(DateTimeUtils.YYYY_MM_DD_HH_MM_EN),

    /**
     * yyyy/MM/dd HH:mm:ss
     */
    YYYY_MM_DD_HH_MM_SS_EN(DateTimeUtils.YYYY_MM_DD_HH_MM_SS_EN),

    /**
     * MM月dd日
     */
    MM_DD_CN(DateTimeUtils.MM_DD_CN),

    /**
     * yyyy年MM月
     */
    YYYY_MM_CN(DateTimeUtils.YYYY_MM_CN),

    /**
     * yyyy年MM月dd日
     */
    YYYY_MM_DD_CN(DateTimeUtils.YYYY_MM_DD_CN),

    /**
     * MM月dd日 HH:mm
     */
    MM_DD_HH_MM_CN(DateTimeUtils.MM_DD_HH_MM_CN),

    /**
     * MM月dd日 HH:mm:ss
     */
    MM_DD_HH_MM_SS_CN(DateTimeUtils.MM_DD_HH_MM_SS_CN),

    /**
     * yyyy年MM月dd日 HH:mm
     */
    YYYY_MM_DD_HH_MM_CN(DateTimeUtils.YYYY_MM_DD_HH_MM_CN),

    /**
     * yyyy年MM月dd日 HH:mm:ss
     */
    YYYY_MM_DD_HH_MM_SS_CN(DateTimeUtils.YYYY_MM_DD_HH_MM_SS_CN),


    /**
     * HH:mm
     */
    HH_MM(DateTimeUtils.HH_MM),

    /**
     * HHmmss
     */
    HHMMSS(DateTimeUtils.HHMMSS),

    /**
     * HH:mm:ss
     */
    HH_MM_SS(DateTimeUtils.HH_MM_SS);

    private final String pattern;

    public static DatePattern parse(String pattern) {
        return Arrays.stream(values())
                .filter(item -> StringUtils.equals(item.pattern, pattern))
                .findFirst()
                .orElse(YYYY_MM_DD_HH_MM_SS);
    }

}
